/**
 * 使用mongoose 模块调用mongoDB 功能
 * 使用模块需要先安装 npm i mongoose
 */
const mongoose = require('mongoose'); //引入mongoose模块
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:')); //设置链接失败绑定事件
db.once('open', function () { //链接成功回调
  // we're connected!
  console.log('connection succeeded')
});
mongoose.connect("mongodb://localhost:27017/tset"); //设置数据库地址和库

init();
// init2();
// init3();

function init() {
  const Books = mongoose.model('books', { //创建模型和对应集合
    name: {
      type: String,
      required: true //必须有 
    },
    title: {
      type: String,
      required: true //必须有 
    },
    text: {
      type: String,
      required: true //必须有 
    },
    url: {
      type: String,
      required: true //必须有 
    },
  });

  const newText = new Books({ //模型对应数据
    name: '我的新大明帝国',
    title: "第258章",
    text: "我是测试数据内容，我叫吉尔",
    url: "http://123.com"
  });
  newText.save().then(() => console.log('meow')); //创建数据和回调
}

function init2() {
  var kittySchema = mongoose.Schema({ //定义一个Schema  相当于定义了一个集合
    name: String
  });
  //们得到了一个带有 String 类型 name 属性的 schema 。 接着我们需要把这个 schema 编译成一个 Model：
  kittySchema.methods.speak = function () {
    var greeting = this.name ?
      "Meow name is " + this.name :
      "I don't have a name";
    console.log(greeting);
  }

  var Kitten = mongoose.model('Kitten', );
  var fluffy = new Kitten({
    name: 'fluffy'
  });
  fluffy.speak(); // "Meow name is fluffy"

  //存入数据
  fluffy.save(function (err, fluffy) {
    if (err) return console.error(err);
    fluffy.speak();
  });
  //查询数据
  Kitten.find(function (err, kittens) {
    if (err) return console.error(err);
    console.log(kittens);
  })
  //条件查询
  Kitten.find({
      name: /^fluff/
    },
    function () {
      console.log("^fluff")
    });
}

function init3() {
  //定义一个Schema
  let NewsSchema = mongoose.Schema({
    title: "string",
    author: String,
    pic: String,
    status: Number,
  })

  let News = mongoose.model("News", NewsSchema, "news"); // mongoose.model("库名称","schema结构对象","表名或集合名称")

  // 增加数据
  let news = new News({
    title: "我是新闻标题2222",
    author: "我是作者222",
    pic: "我是图片2222222",
    status: 1
  })
  // news.save(function (err) {
  //   if (err) console.error(err);

  //   console.log("存入成功");
  // })
  // News.updateOne({//根据id更新数据
  //   "_id": "62092ff0d472148c2d267dd3"
  // }, {
  //   title: "我是更新内容"
  // }, function (err, doc) {
  //   console.log("doc", doc)
  // })
  News.deleteOne({ //根据id删除数据
    _id: "62092ff0d472148c2d267dd3"
  }, function (err, result) {
    console.log("deleteOne", result)
  })
}